# xlwings的读写

import xlwings as xw

# 基于 app 开启  中间是操作
app = xw.App(visible=True, add_book=False)
app.display_alerts = False
app.screen_updating = False

wb = app.books.open('pratice.xlsx')
sheet = wb.sheets.active
print(sheet)

# 获取单元格的值
A1 = sheet.range('A1').value
print(A1)
# 获取横向或纵向多个单元格的值，返回列表
A1_A3 = sheet.range('A1:A3').value
print(A1_A3)
# 获取给定范围内多个单元格的值，返回嵌套列表，按行为列表
A1_C4 = sheet.range('A1:C4').value
print(A1_C4)

# 在 xlwings 中，可以通过 sheet.range 获取一个或多个单元格进行操作，另外也可以不用 sheet.range 获取：
A1_C4 = sheet['A1:C4'].value
print(A1_C4)

# 写入数据
# 以下为写入 1 个单元格、一行或一列写入多个单元格、写入范围内多个单元格代码
sheet['A2'].value = '大明'
# # 一行或一列写入多个单元格
# # 横向写入A1:C1
sheet.range('A1').value = [1, 2, 3]
# 纵向写入A1:A3
sheet.range('A1').options(transpose=True).value = [1, 2, 3]
# 写入范围内多个单元格
sheet.range('A5').options(expand='table').value = [[1, 2, 3], [1, 2, 3]]

# 添加一行新纪录
sheet.range('A8').value = ['小兰', 23, '女']

# 六、获取数据范围
shape = sheet.used_range.shape
print(shape)
# 方法二  当前库版本有问题
# nrow = sheet.api.UsedRange.Rows.count
# ncol = sheet.api.UsedRange.Columns.count
# print(nrow)
# print(ncol)

# 八、获取及设置公式
# 可以调用Excel公式，这是pandas无法完成的
# 获取
print(sheet.range('B2').formula_array)
# 写入
sheet.range('B2').formula = '=SUM(A1,A2)'

# 九、 获取、设置及清除颜色格式
print(sheet.range('C1').color)
sheet.range('C1').color = (255, 0, 120)
sheet.range('C1').color = None

# 保存
wb.save()
wb.close()
# app 关闭
app.quit()
